package org.aplombh.java.awcing.basic.basics.IntervalMerging;

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

/**
 * 给定 n 个区间 [li,ri]，要求合并所有有交集的区间。
 * <p>
 * 注意如果在端点处相交，也算有交集。
 * <p>
 * 输出合并完成后的区间个数。
 * <p>
 * 例如：[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。
 * <p>
 * 输入格式
 * 第一行包含整数 n。
 * <p>
 * 接下来 n 行，每行包含两个整数 l 和 r。
 * <p>
 * 输出格式
 * 共一行，包含一个整数，表示合并区间完成后的区间个数。
 * <p>
 * 数据范围
 * 1≤n≤100000,
 * −109≤li≤ri≤109
 * 输入样例：
 * 5
 * 1 2
 * 2 4
 * 5 6
 * 7 8
 * 7 9
 * 输出样例：
 * 3
 */
public class intervalMerge_803 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        TreeMap<Integer, Integer> segs = new TreeMap<>();
        int n = scanner.nextInt();
        while (n-- != 0) {
            int l = scanner.nextInt();
            int r = scanner.nextInt();
            segs.put(l, r);
        }
        Map<Integer, Integer> res = merge(segs);
        System.out.println(res.size());

    }

    public static Map<Integer, Integer> merge(Map<Integer, Integer> segs) {
        TreeMap<Integer, Integer> res = new TreeMap<>();

        // sort
        // Treemap sorts by key by default
        // Treemap默认通过key排序

        int start = -1 << 30, end = -1 << 30;
        for (Map.Entry<Integer, Integer> seg : segs.entrySet()) {
            // if end < this.start, the two part are separate;
            // 如果end < this.start 两部分分离
            if (end < seg.getKey()) {
                if (start != -1 << 30)
                    res.put(start, end);

                start = seg.getKey();
                end = seg.getValue();
            } else
                end = Math.max(end, seg.getValue());
        }
        if (start != -1 << 30)
            res.put(start, end);

        return res;
    }
}
